package org.dxy.infrastructure.persistent.db.mybatispuls.po;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

/**
 * @ description: 事件表
 * @ author: dxy
 * @ createTime: 2025/8/2 22:10
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("domain_event")
public class DomainEventPo {

    @TableId(type = IdType.INPUT)
    private Long id;

    /** 聚合根类型，例如 "ProductionLine" */
    private String aggregateType;

    /** 聚合根 ID，例如产线 ID */
    private Long aggregateId;

    /** 事件类型，例如 "creat" */
    private String eventType;

    /**
     * 事件版本（用于事件升级、演进）
     * 比如 v1 -> 1, v2 -> 2
     */
    private Integer eventVersion;

    /** 序列号，表示该聚合的第几个事件（如 1、2、3） */
    private Integer eventIndex;

    /** 事件数据的 JSON 字符串（序列化后的事件体） */
    private String eventData;

    /** 事件创建时间 */
    private LocalDateTime occurredAt;

    /**
     * 事件来源（可选字段，用于标识事件是由哪个系统或模块触发的，用户操作引发，定时任务引发）
     * 例如："user"、"api"、"manual-retry"
     */
    private String source;

    /** 是否已发布（供事件总线标记状态） */
    private Boolean published;
}
